/*
  数组的实例方法：
     filter() 
      作用：用指定条件，对数组进行过滤/筛选，留下一部分，去掉一部分
      返回：满足条件的 新数组
      语法：array.filter((item, index, arr) => {
        回调的参数和forEach回调参数是一样的
        return true， 回调返回true，则当前item会放入到返回的数组中
        return false，回调返回false，则当前item 不会放入到返回的数组中
      })
 */
// 1. 基本类型
const beauty = ['西施', '貂蝉', '杨玉环', '王昭君']
// 找出 姓杨的 美女 
// const result = beauty.filter((item) => {
//   if (item.startsWith('杨')) {
//     return true
//   } else {
//     return false
//   }
// })

// const result = beauty.filter((item) => item.startsWith('杨'))
// console.log(result)

// 四大美女的 腰围 ，找出  腰围 在 50以上的
// const waistlines = [55, 43, 70, 58]
// const result = waistlines.filter(item => item > 50)
// console.log(result)
// console.log(waistlines)
// 2. 引用类型
const girls = [
  {
    name: '王昭君',
    height: 170
  }, {
    name: '貂蝉',
    height: 172
  }, {
    name: '西施',
    height: 162
  }, {
    name: '杨玉环',
    height: 169
  }
]
// 找出 身高在165及其以上的
// const result = girls.filter(item => item.height >= 165)
// console.log(result)
// console.log(girls)

// 实现filter原理
Array.prototype._filter = function (callback) {
  const result = []
  for (let i = 0; i < this.length; i++) {
    if (callback(this[i], i, this)) {
      result.push(this[i])
    }
  }
  return result
}

const result = girls._filter(item => item.height >= 165)
console.log(result)
console.log(girls)
